Продолжается подписка на наши издания! Вы не забыли подписаться?

Использование компонентов управления платформой Java
Следите за вашими приложениями Java SE 5.0

Авторы: Мэй Гловер Ганн
IBM
Джордж Харли
IBM
Кэролин Гаф
IBM
Опубликовано: 02.11.2006

В последней версии платформы Java имеется несколько новых функциональных возможностей для мониторинга и управления. В данной статье трое разработчиков группы IBM Java Technology Centre помогут вам начать использование этого API. После краткого обзора пакета java.lang.management они рассмотрят несколько коротких практических сценариев для испытания производительности работающей JVM.

Среди многих новых возможностей, представленных в версии 5.0 платформы Java 2, имеется API, позволяющий Java-приложениям и совместимым программам выполнять мониторинг и управлять виртуальной машиной Java (JVM) и операционной системой, на которой она выполняется. В этой статье вы узнаете о возможностях этого нового API управления платформой, расположенного в пакете java.lang.management. Данная статья поможет вам ускорить использование нового набора мощных возможностей, которые станут еще более важными в следующих версиях платформы Java.

Мониторинг и управление VM 5.0

Java 5.0 предоставляет новые возможности для мониторинга и управления работающей виртуальной машиной. Разработчики и системные администраторы могут следить (а некоторые свойства точно регулировать) за производительностью VM 5.0. Механизм работы с этими возможностями будет знаком любому, кто имеет опыт использования Java Management Extensions (JMX). При помощи JMX-технологии набор контролируемых ресурсов платформы можно рассматривать как простые, четко определенные объекты, чьи свойства соответствуют низкоуровневым характеристикам конкретного ресурса.

В API управления платформой эти четко-определенные объекты называются компонентами MXBean. Если вы полагаете, что MXBean звучит как вид, возможно, более знакомого MBean, то вы правы. Эти компоненты MXBean (или компоненты MBean-платформы) являются, в сущности, компонентами управления, охватывающими определенные части внутреннего устройства платформы 5.0. На рисунке 1 изображены компоненты MXBean в общем контексте.


Рисунок 1. Компоненты MXBean предоставляют управляющие интерфейсы для Java-платформы.

Вы можете найти и настроить много различных типов функциональности работающей, совместимой VM 5.0; например, вы могли бы получить подробности поведения используемой системы компиляции just-in-time, или получить изображение индикатора хода выполнения службы сборки мусора.

Любое Java-приложение может использовать компоненты платформы, просто получая необходимую ссылку на компонент (используя технику, рассмотренную в данной статье) и затем выполняя соответствующие вызовы методов. В простейшем сценарии клиент компонента может получить информацию о платформе, на которой он работает. Но клиент компонента может также следить за поведением полностью отдельной JVM. Это возможно потому, что MXBean является видом MBean и может удаленно управляться при помощи стандартных JMX-служб, доступных в Java 5.0.

JConsole

<...>

Аутентификация по паролю

В каталоге jre/lib/management вашего комплекта 5.0 SDK имеется файл под названием jmxremote.password.template. Он определяет имена пользователей и пароли для двух ролей. Первая – это роль мониторинга, разрешающая доступ только к читающим информацию функциям управления; вторая – роль управления для записывающих функций. Клиенты могут выполнять аутентификацию с именами пользователя либо monitorRole, либо controlRole в зависимости от требуемого уровня доступа. Для гарантирования того, что только эти аутентифицированные пользователи могут иметь доступ, вы должны выполнить следующие действия:

  1. Скопировать содержимое jmxremote.password.template в файл под названием jmxremote.password и снять комментарии с последних строк файла, определяющих имена пользователей и пароли, и при желании изменить пароли.
  2. Изменить права доступа к файлу jmxremote.password таким образом, чтобы он мог читаться и меняться только его владельцем. В UNIX и UNIX-подобных операционных системах установите права доступа в 600. В Microsoft Windows следуйте инструкциям, приведенным в статье "Как защитить файл password в операционных системах Microsoft Windows", ссылка на которую приведена в разделе Ресурсы.)
  3. При запуске VM укажите месторасположение используемого password-файла в следующем параметре командной строки:
-Dcom.sun.management.jmxremote.password.file=<file-path>     

С точки зрения управляющего клиентского приложения вы должны предоставить корректную комбинацию username/password для доступа к VM, для которой включена аутентификация по паролю. Если клиентом является программа JConsole, сделать это просто: на первой закладке Connection предоставлены поля username и password. Для написания кода, предоставляющего информацию для аутентификации на удаленной VM, вы должны добавить изменения, приведенные в листинге 16, к первоначальному коду подключения из листинга 4:

Листинг 16. Подключение к удаленной VM, требующей аутентификации пользователя

try {
  // предоставить корректные имя пользователя и пароль
  // (например, через аргументы программы)
  String user = "monitorRole";
  String pw = "password";
  
  // поместить имя пользователя и пароль в строковый массив credentials, 
  // который может быть использован при подключении к удаленному JMX-агенту
  String[] credentials = new String[] { user, pw };

  // строковый массив credentials поместить в map со значением ключа, равным  
  // строго заданной строке идентификатора полномочий 
  Map<String, String[]> props = new HashMap<String, String[]>();
  props.put("jmx.remote.credentials", credentials);

  // предоставить карту полномочий методу connect 
  JMXServiceURL address = 
    new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
  JMXConnector connector = JMXConnectorFactory.connect(address, props);
  
  // тривиальная задача получения ссылки на соединение MBean-сервера  
  // с удаленным агентом 
  MBeanServerConnection mbs = connector.getMBeanServerConnection();
} catch ...  

Указание неправильного имени пользователя или пароля виртуальной машине, требующей аутентификации, приводит к генерированию исключительной ситуации java.lang.SecurityException. Аналогично, аутентификация с ролью monitorRole и последующий вызов одной из операций чтение/запись (например, запрос на сборку мусора) тоже приведет к генерированию SecurityException.

Использование SSL

Вы можете использовать SSL для шифрования информации, передаваемой из JMX-агента платформы управляющему клиентскому приложению, осуществляющему ее мониторинг. Передаваемые данные шифруются при помощи криптографии с открытым ключом (ассиметричным), поэтому только владелец соответствующего личного ключа может расшифровать данные. Это запрещает перехватывающим пакеты приложениям просмотр содержимого пакетов во время передачи информации. Использование этой возможности требует настройки SSL на обеих взаимодействующих сторонах, что включает в себя генерирование пары ключей и цифрового сертификата. Подробная информация по этой теме выходит за рамки данной статьи; прочтите, пожалуйста, отличное руководство Грега Трависа (Greg Travis) "Использование JSSE для защиты коммуникации между сокетами" (см. раздел Ресурсы).

Хорошей новостью является то, что после создания пары ключей и сертификата вам не нужно менять ваш управляющий код для использования SSL. Вы можете разрешить шифрование простым указанием определенных параметров командной строки. Во-первых, Java-приложение, которым вы хотите управлять или выполнять мониторинг, должно быть запущено со следующими параметрами:

-Dcom.sun.management.jmxremote.ssl.need.client.auth=true
-Djavax.net.ssl.keyStore=<keystore-location>
-Djavax.net.ssl.trustStore=<truststore-location>
-Djavax.net.ssl.keyStoreType=<keystore-type>
-Djavax.net.ssl.keyStorePassword=<keystore-password>
-Djavax.net.ssl.trustStoreType=<truststore-type>
-Djavax.net.ssl.trustStorePassword=<truststore-password> 

Управляющие клиентские приложения, желающие взаимодействовать с платформой, должны быть запущены с подмножеством указанных выше параметров: вы можете опустить первую и две последние строчки. Если клиентским приложением является JConsole, вы можете передать эти параметры при запуске GUI, используя синтаксис командной строки -J, через который передаются Java-параметры в JVM.

Опять же, руководство "Использование JSSE для защиты коммуникации между сокетами" предоставляет более подробную информацию по этим параметрам.

Заключение

Мы надеемся, что побудили вас к поиску дополнительной информации по API управления платформой Java 5.0. Так же как появление Java Management Extensions обеспечило разработчиков и администраторов корпоративных Java-приложений стандартным средством мониторинга и управления их развертыванием, введение java.lang.management API в Java 5.0 предоставило средства, дающие возможность заглянуть во внутренности той же платформы, на которой выполняются ваши приложения.

MXBean-компоненты довольно просто получить и использовать, независимо от того, следите ли вы за пулами потоков в выполняющемся локально приложении, либо защищенным способом контролируете использование оперативной памяти критически-важной программой для ее обслуживания с любого места вашей интранет-сети. MXBean-компоненты играют центральную роль в предоставлении помощи для лучшего понимания среды, в которой выполняется ваш код, пытаетесь ли вы ненавязчивым способом понять характеристики незнакомых Java-реализаций, либо создаете ваш собственный инструментарий для профилирования и мониторинга производительности.

Поскольку "диагностируемость, мониторинг и управление" являются одними из ключевых принципов ожидаемой версии 6.0 платформы Java, этот API начинает играть все более важную роль в будущем Java-технологии.

v


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

Copyright © 1994-2016 ООО "К-Пресс"